【登壇資料】目的別、サーバーレスアーキテクチャの教科書!これのときはこう!【アーキテクチャ20連発】 #cm_osaka
大阪でサーバーレスの話をしてきました
クラスメソッドの開発を知る!大阪勉強会 第7回 これから始めるサーバーレス!〜最新サービス使いこなし術〜で
スピーカーとして登壇しました。参加率が非常に高く、多くの方にご参加いただきました。誠にありがとうございました!
本記事では、勉強会でお話しした「目的別、サーバーレスアーキテクチャの教科書!これのときはこう!」の発表資料を公開します。
発表資料
内容
本セッションでは、これからサーバーレスを始める人向けに、サーバーレスとは何か?という話から、具体的にどのようなアーキテクチャを構築するのか?というお話しをさせていただきました。
サーバーレスアーキテクチャパターン
本セッションでは、サーバーレスアーキテクチャのパターンを20種類ご紹介しました。サーバーレスと言えるアーキテクチャは20種類では語りきれないほど沢山ありますが、今回は独断と偏見で選んでみました。
REST API
Amazon API Gateway と AWS Lambda と Amazon DynamoDB を組み合わせた、サーバーレスの代表格とも言えるアーキテクチャです。
参考資料
ユーザー認証・認可
Amazon Cognito が提供する Federated Identity と User Pools を組み合わせながら、ソーシャルログイン + 独自ログインを使って AWS のサービスを直接利用させるアーキテクチャです。AWS IAM を使って細やかなアクセスコントロールをかけられるので、ユーザーに使わせたいサービスだけ使わせることが可能です。
参考資料
写真共有サービス
Amazon Cognito でユーザーを認証しつつ、Amazon S3 に写真を直接アップロードするようなアーキテクチャです。このように、アプリと AWS のサービスを直接繋ぐアーキテクチャを「2-Tier アーキテクチャ」と呼んでいます。
参考資料
コンテンツ配信 (Cache Distributionパターン)
サーバーレスという言葉が世の中に出る前からよく使われているクラウドデザインパターンです。Amazon CloudFront と Amazon S3 を組み合わせた CDN 構成です。サーバーレスアーキテクチャを組むときにもよく使われます。
参考資料
Single Page Application (SPA)
前述のコンテンツ配信のアーキテクチャに加えて、Amazon API Gateway を用いた API 層をバックエンドに構えつつ、JavaScript から呼び出すような構成です。最近、オライリーからもこのアーキテクチャに特化した書籍が出ており、Web サイトを作る上での流行のアーキテクチャと言えます。
参考資料
- 【3分で読める!】サーバレスアーキテクチャって何?エンジニアが憧れるクラウドを活かしたシステムのご紹介 – サーバーワークスエンジニアブログ
- O'Reilly Japan - サーバーレスシングルページアプリケーション
AB テスト
前述のコンテンツ配信のアーキテクチャに加えて、Amazon CloudFront 経由でのリクエスト時にロジックを組み込むことができる Lambda@Edge を使って、AB テストを実施するアーキテクチャです。Lambda@Edge は現在はプレビュー提供ですので、正式リリースが楽しみです。
参考資料
デバイス判定 (レスポンシブ)
こちらも前述の Lambda@Edge の活用法の一例です。HTTP リクエストヘッダーのユーザーエージェントを判定しつつ、アクセス先のファイルを変えたりすることが可能なアーキテクチャです。
参考資料
モバイルバックエンド
モバイルアプリにサーバーレス構成を盛り込んだアーキテクチャです。こちらは株式会社すかいらーく様に提供させていただいた「ガスト」「バーミヤン」「ジョナサン」の公式 iOS / Android アプリで利用しています。
参考資料
DDoS 対策
DDoS 攻撃をブロックするアーキテクチャです。アクセスログを Amazon Kinesis (Firehose / Analytics) を使ってリアルタイムに集計し、ある条件にヒットする IP を AWS WAF に自動登録するようなアーキテクチャです。どのような条件で遮断するかをカスタマイズできるところが特徴です。
参考資料
レートベースルールによる DDoS/Brute force 対策
AWS WAF のアップデート機能である「レートベースルールによる遮断」を用いて、一定期間のリクエスト数が規定以上の IP を遮断するようなアーキテクチャです。このような対策を簡単に取れるのは、非常に有り難いですね。
参考資料
Alexa Skill (VUI)
Amazon Alexa は、Amazon が提供する Voice User Interface (VUI) です。Amazon Alexa の拡張機能にあたる「Alexa Skill」はサーバーレスで作ります。Alexa 対応デバイスから音声として送られてきて、Alexa が音声から変換したテキストを AWS Lambda を用いて実行します。
参考資料
リアルタイムデータアーカイブ
Amazon Kinesis を使うと、逐一送信されるログなどのデータをリアルタイムにアーカイブすることができます。Amazon Redshift に入れるようにすることで、BI ツールを用いてログデータを分析することもできます。あとで使うデータにするために、とりあえず Amazon S3 に格納しておくだけでも有用ですね。
参考資料
リアルタイムデータ分析
Amazon Kinesis を使った、もう一例です。Kinesis Analytics を使うと、特定のデータが流れてきたときにアラートを出す、などといったことが可能になります。
参考資料
ファイルインポート
Amazon S3 の「Event Notification」を使うと、S3 にデータが格納されたときに Amazon SNS 経由で Lambda Function を実行させることができます。これを使って、アップロードされた CSV データの中身を取り出して Amazon DynamoDB に書き込んだり、別な形式に変換してから保存し直すといったことが可能になります。
参考資料
画像データ抽出
Amazon S3 の「Event Notification」の活用例です。S3 に画像がアップロードされたイベントをトリガーに、EXIF 情報を抜き出したり、Amazon Rekognition を使って画像解析(例えば、顔年齢を抽出するなど)をしたり、サムネイル画像を生成しています。イベントを起点に実行するタスクが多い場合は AWS Step Functions を使って一連のフローにまとめると良いです。
参考資料
ChatOps #1 Slash Command
チャットツールである Slack の「Slash Command」を使って、特定のコマンド文字列がチャットのメッセージとして送られてきたタイミングで特定の API をコールすることができます。この機能を使って、Amazon API Gateway で構築した API を呼び出させるようにしています。例えば「Slack に『デプロイして!』とメッセージを送ったら実際にデプロイされる」などといったオペレーションも、サーバーレスで実現できます。
参考資料
ChatOps #2 Alert
AWS CloudWatch と Amazon SNS と AWS Lambda を組み合わせて、アラートを Slack に自動送信するようなアーキテクチャです。例えば特定のメトリクスを CloudWatch で記録するようにしておけば「規定値以上の数値だった場合にアラートを出す」などといった運用に役立つアーキテクチャを構成できます。
参考資料
EBS スナップショット
Amazon EBS のスナップショットの作成 / コピーを起点に、EBS のライフサイクルを AWS Step Functions を使って実現するアーキテクチャです。EBS を使っているサービスを運用している場合、追加でこの構成を入れておくと便利です。
参考資料
承認ワークフロー
メールによる承認フローを AWS Step Functions を使って実現するアーキテクチャです。このアーキテクチャの特徴は、IT 企業に限らずどのような分野の企業にも活かせる構成であることです。最新サービスを使うと、こんなこともできるのです。
参考資料
パフォーマンスチューニング
AWS X-Ray は、サービス間の通信処理のパフォーマンスやエラーを分析 / デバッグするためのサービスです。どのレイヤーにボトルネックがあるのか簡単に見つけることができるため、パフォーマンスチューニングに最適です。最近では AWS Lambda での利用がプレビュー提供されました。サーバーレスアーキテクチャは色々なサービス同士を繋ぎ合わせて実現することが多いので、こういったパフォーマンスを分析するためのサービスは必要不可欠ですね。
参考資料
まとめ
特にお伝えしたかったのはサーバーレスに関連するサービス(AWS Lambda、Amazon API Gateway、Amazon DynamoDB など)はアップデートが多く、ベストなアーキテクチャは日々変わってくるということです。
これはサーバーレスに限らず言えるのかも知れませんが、今日構築したアーキテクチャが明日ベストかは分からないという意識を常に持ちながら、最新のアップデート情報を欠かさずキャッチアップする姿勢が何よりも大事なのだと思っています。
今回は大阪の勉強会には初登壇だったのですが、温かく迎えていただき誠にありがとうございました!また機会がありましたら、よろしくお願いします。
サーバーレスエンジニア募集中!
弊社では、サーバーレスに興味がある / 得意なエンジニアを募集しています!
最近では、サーバーレスを本番投入する案件もかなり増えてきており、様々なお客様の課題を解決する手段として用いられています。サーバーレスを考えるだけではなく、実践を通して学ぶことができます。また、新しい技術をいち早く試しながら、積極的に仕事に組み込んでいくようなスタイルですので、とても刺激があります。
ご興味のある方は、まずはご連絡ください!